package dao.account;

import java.sql.*;

import dao.DataConnection;
import account.model.Account;
import account.model.Docent;
import account.model.Persoon;
import account.model.Student;
import account.model.SubTeam;
import tools.language.MentionAccounts;
import tools.old.files.DocentRegistrerenView;
import tools.old.files.StudentRegistrerenView;

public class DataLayerAccount extends DataConnection {

	//account checken tijdens het inloggen
	public void loadAccounts(){
		String sql = "SELECT * FROM accounts a " +
				"inner join persoon p on a.gebruikers_id = p.persoon_id";

		try{
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql); 		
			Account acc;
			Persoon p;

			while(rs.next()){									
				p = new Persoon();
				p.setEmail(rs.getString("email"));
				p.setVoornaam(rs.getString("voornaam"));
				p.setAchternaam(rs.getString("achternaam"));
				
				acc = new Account();			
				acc.setAccount_id(rs.getInt("gebruikers_id"));
				acc.setGebruikersnaam(rs.getString("gebruikersnaam"));
				acc.setWachtwoord(rs.getString("wachtwoord"));
				acc.setTypenummer(rs.getInt("gebruikerstype"));
				acc.setPersoon(p);
				
				SubTeam.getInstance().addAccount(acc);			
			}	
		}
		catch(SQLException sqle){
			sqle.printStackTrace();
		}
	}
	
	//TODO gegevens student inladen bij juiste account
	public void loadStudent(){
		String sql = "SELECT * FROM accounts a "
				+ "inner join student s on a.gebruikers_id = s.student_id";

		try{
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
			Student s;
			Account acc;

			while(rs.next()){		
				s = new Student();
				
				s.setOvnummer(rs.getInt("ov_nummer"));
				s.setStatus(rs.getString("status"));
				
				acc = new Account();
				acc.setAccount_id(rs.getInt("gebruikers_id"));
		
				acc.setStudent(s);
				SubTeam.getInstance().addAccount(acc);			
			}	
		}
		catch(SQLException sqle){
			sqle.printStackTrace();
		}
	}

	//account van studenten bijwerken
	public void updateStudent(Account a, Persoon p, Student s) {
//		String gebruikersnaam = a.getGebruikersnaam();
		String wachtwoord = a.getWachtwoord();
//		String voornaam = p.getVoornaam();
//		String achternaam = p.getAchternaam();
		String email = p.getEmail();
		String status = s.getStatus();
//		int ov_nummer = s.getOvnummer();
		
		int account_id = a.getAccount_id();

		String sql = "UPDATE accounts inner join persoon, student SET ";
			sql +="wachtwoord='" + wachtwoord 
//				+ "', gebruikersnaam='" + gebruikersnaam
//				+ "', voornaam='" + voornaam
//				+ "', achternaam='" + achternaam
				+ "', email='" + email
//				+ "', ov_nummer='" + ov_nummer
				+ "', status='" + status
				+ "' WHERE gebruikers_id=" +account_id + "";

		try{
			stmt = conn.createStatement();
			stmt.executeUpdate(sql); 
			stmt.close();
		}

		catch(SQLException sqle){
			sqle.printStackTrace();
		}
	}

	//account van docenten bijwerken
	public void updateDocent(Account a, Persoon p, Docent d) {
//		String gebruikersnaam = a.getGebruikersnaam();
		String wachtwoord = a.getWachtwoord();
//		String voornaam = p.getVoornaam();
//		String achternaam = p.getAchternaam();
		String email = p.getEmail();
		String afkorting = d.getAfkorting();

		int account_id = a.getAccount_id();

		String sql = "UPDATE accounts inner join persoon, docent SET ";
				sql +="wachtwoord='" + wachtwoord 
//				+ "', gebruikersnaam='" + gebruikersnaam
//				+ "', voornaam='" + voornaam
//				+ "', achternaam='" + achternaam
				+ "', email='" + email
				+ "', afkorting='" + afkorting
				+ "' WHERE gebruikers_id=" +account_id + "";

		try{
			stmt = conn.createStatement();
			stmt.executeUpdate(sql); 
			stmt.close();
		}

		catch(SQLException sqle){
			sqle.printStackTrace();
		}
	}

	//TODO KISHAN
	//docenten account bijwerken
	public void updatePassword(Persoon a) {
		String email = a.getEmail();
		String wachtwoord = "wachtwoord";

		String sql = "UPDATE accounts SET ";
		if (!wachtwoord.equals("generator")){
			sql += "wachtwoord='" + wachtwoord + "', ";
		}
		sql += "WHERE email=" + email;

		System.out.println(sql);

		try{
			stmt = conn.createStatement();
			stmt.executeUpdate(sql); 
			stmt.close();
		}

		catch(SQLException sqle){
			sqle.printStackTrace();
		}
	}

	//TODO KISHAN
	//kijkt in de database of de emailadress bestaat
	public Account Checkformail(String mail) throws SQLException{
		openConn();
		String sql="select * from accounts where email ='"+mail+"'";

		stmt = conn.createStatement();
		rs = stmt.executeQuery(sql); 		
		Account acc;	
		//kijken
		while(rs.next()){									
			acc = new Account();
//			acc.setServer_ip(rs.getString("ip_address"));
			acc.setAccount_id(rs.getInt("gebruikers_id"));
			acc.setGebruikersnaam(rs.getString("gebruikersnaam"));
			acc.setWachtwoord(rs.getString("wachtwoord"));
//			acc.setEmail(rs.getString("email"));
//			acc.setVoornaam(rs.getString("voornaam"));
//			acc.setAchternaam(rs.getString("achternaam"));
			acc.setTypenummer(rs.getInt("gebruikerstype"));
//			acc.setStatus(rs.getString("status"));
//			acc.setOvnummer(rs.getInt("ov_nummer"));
//			acc.setAfkorting(rs.getString("afkorting"));
			//	Gebruikerslijst.getInstance().addAccount(acc);	
			return acc;
		}
		return null;
	}

	//TODO KISHAN
	public Account checkbirth(int birth) throws SQLException{
		openConn();
		String sql="select * from accounts where geboortedatum ='"+birth+"'";

		stmt = conn.createStatement();

		rs = stmt.executeQuery(sql); 	
		Account acc;
		while(rs.next()){									
			acc = new Account();
//			acc.setServer_ip(rs.getString("ip_address"));
			acc.setAccount_id(rs.getInt("gebruikers_id"));
			acc.setGebruikersnaam(rs.getString("gebruikersnaam"));
			acc.setWachtwoord(rs.getString("wachtwoord"));
//			acc.setEmail(rs.getString("email"));
//			acc.setVoornaam(rs.getString("voornaam"));
//			acc.setAchternaam(rs.getString("achternaam"));
			acc.setTypenummer(rs.getInt("gebruikerstype"));
//			acc.setStatus(rs.getString("status"));
//			acc.setOvnummer(rs.getInt("ov_nummer"));
//			acc.setAfkorting(rs.getString("afkorting"));
//			acc.setGeboortedatum(rs.getInt("geoortedatum"));
			//	Gebruikerslijst.getInstance().addAccount(acc);	


			System.out.println(acc);
			return acc;
		}
		return null;
	}

	//OUDE CODE geschrapt ivm andere manier van gebruikers toevoegen

	// insert voor studenten
//	public void insertStudent(Account a){
//
//		String sql = "INSERT INTO" +
//				" accounts (" +
//				//				"`ip_address`, " +
//				"`gebruikersnaam`, " +
//				"`voornaam`, " +
//				"`achternaam`, " +
//				"`email`," +
//				"`wachtwoord`, " +
//				"`foto`, " +
//				"`online_status`," +
//				"`gebruikerstype`," +
//				"`ov_nummer`," +
//				"`afkorting`," +
//				"`geboortedatum`)"+
//				"VALUES('" 
//
////						+ null
////						+ "','" 
//+ a.getGebruikersnaam()
//+ "','" 
//+ a.getVoornaam() 
//+ "','" 
//+ a.getAchternaam() 
//+ "','" 
//+ a.getEmail() 
//+ "','" 
//+ a.getWachtwoord() 
//+ "','"
//+ null
//+ "','"
//+ 0
//+ "','" 
//+ 1
//+ "','"
//+ a.getOvnummer()
//+ "','"
//+ null
//+"' )";  
//
//		try{
//			stmt = conn.createStatement();
//			stmt.executeUpdate(sql); 
//			stmt.close();
//		}
//		catch(SQLException sqle){
//			sqle.printStackTrace();
//		}	
//	}
//
//	// insert voor docenten
//	public void insertDocent(Account a){
//		// velden als user_id worden niet meegegeven omdat die worden gegenereerd
//		String sql = "INSERT INTO" +
//				" accounts (" +
//				//				"`ip_address`, " +
//				"`gebruikersnaam`, " +
//				"`voornaam`, " +
//				"`achternaam`, " +
//				"`email`," +
//				"`wachtwoord`, " +
//				"`foto`, " +
//				"`online_status`," +
//				"`gebruikerstype`," +
//				"`ov_nummer`," +
//				"`afkorting`) " +
//				"VALUES('" 
//				//				+ null
//				//				+ "','" 
//				+ a.getGebruikersnaam()
//				+ "','" 
//				+ a.getVoornaam() 
//				+ "','" 
//				+ a.getAchternaam() 
//				+ "','" 
//				+ a.getEmail() 
//				+ "','" 
//				+ a.getWachtwoord() 
//				+ "','"
//				+ null
//				+ "','"
//				+ 0
//				+ "','" 
//				+ 2
//				+ "','"
//				+ 0
//				+ "','"
//				+ a.getAfkorting()
//				+"' )";   
//
//		try{
//			stmt = conn.createStatement();
//			stmt.executeUpdate(sql); 
//			stmt.close();
//		}
//		catch(SQLException sqle){
//			sqle.printStackTrace();
//		}	
//	}
//
//	//checken gebruikersnaam tijdens registratie van docenten
//	public String checkDocentName(){
//		String docent = DocentRegistrerenView.getInstance().getGebruikersnaamtf().getText();
//		String duplicate = null;
//
//		try{
//			stmt = conn.createStatement();
//			rs = stmt.executeQuery("SELECT * from accounts where gebruikersnaam='" + docent + "'"); 
//
//			while(rs.next()){
//				duplicate = rs.getString(1);
//			}
//
//			if(duplicate == null){
//				System.out.println("Gebruikersnaam is goed!");
//			}
//			else{
//				MentionAccounts.getInstance().errorUsername();
//			}
//		}
//		catch(SQLException sqle){
//			sqle.printStackTrace();
//		}
//		return duplicate;
//	}
//
//	//checken gebruikersnaam tijdens registratie van studenten
//	public String checkStudentName(){
//		String student = StudentRegistrerenView.getInstance().getGebruikersnaamtf().getText();
//		String duplicate = null;
//
//		try{
//			stmt = conn.createStatement();
//			rs = stmt.executeQuery("SELECT * from accounts where gebruikersnaam='" + student + "'"); 
//
//			while(rs.next()){
//				duplicate = rs.getString(1);
//			}
//
//			if(duplicate == null){
//				System.out.println("Gebruikersnaam is goed!");
//			}
//			else{
//				MentionAccounts.getInstance().errorUsername();
//			}
//		}
//		catch(SQLException sqle){
//			sqle.printStackTrace();
//		}
//		return duplicate;
//	}
}